package by2019;

import java.util.Arrays;
import java.util.PriorityQueue;

/*
 * 设计一个找到数据流中第K大元素的类（class）。注意是排序后的第K大元素，不是第K个不同的元素。
 * 要点：
 * 		维护一个包含k个大数的优先队列，如果有数进来则对队列进行维护，保持堆顶元素最小
 * 		则每次加数只需要和堆顶元素进行比较
 */
public class 流动数据中第k大的数 {

	private static PriorityQueue<Integer> queue;
	private static int key;

	public static void main(String[] args) {
		int[] nums = {};

		new 流动数据中第k大的数(2, nums);

		System.out.println("\n第2大的数为" + add(-1));

	}

	private 流动数据中第k大的数(int k, int[] nums) {
		key = k;
		queue = new PriorityQueue<Integer>();
		Arrays.sort(nums);

		for (int i : nums) {
			add(i);
		}
		System.out.println(queue);

	}

	private static int add(int val) {
		System.out.println("进入add方法");

		if (queue.size() == 0) {
			System.out.println("进入队列为空判断");
			queue.add(val);
			return val;
		}

		if (queue.size() < key) {
			System.out.println("进入队列元素比k小判断");
			queue.add(val);
			return queue.peek();
		}

		if (val > queue.peek()) {
			System.out.println("进入队列元素替换判断");
			queue.poll();
			queue.add(val);
			return queue.peek();
		}
		System.out.println(queue);
		return 9999;

	}

}
